Microprocessors have found their way into a huge variety of products. Often the processor and its programming is completely "embedded" into the design of the device, hence the term "embedded processors" to describe such processors. Several examples of devices having embedded processors are cellular telephones, computer printers, high performance disk drives for computer data, and automobile control systems.
Development tools that are useful for general purpose (non-embedded) processors are not satisfactory for embedded processor development. In other words, the test procedures for production of the processor itself may not be satisfactory for testing the processor in its embedded environment. It is more difficult to have visibility into processor operation. To solve this problem, one technique that is being increasingly used is referred to as "emulation".
In general, an emulator, whether software or hardware, permits direct control by a designer over a target processor. Because it is the application in which the processor will be used, and not the processor itself, that is being designed, the emulator must emulate those conditions.
In-circuit emulation, commonly referred to as ICE, uses emulators that are typically a combination of hardware and software. The emulator is typically connected between the embedded processor and a host CPU that is running debugging software. The emulation is "in-circuit" in the sense that the processor may be connected to the emulator while it is embedded into the system in which it is to be embedded.
Real-time in-circuit emulation permits a software designer to monitor, analyze, and modify code without impacting operation of the device in which the processor is embedded. The behavior of the emulator is identical to that of the target. For example, in the case of an embedded processor for a disk drive, the emulator might permit the designer to modify the code while the disk drive continues to run normally.